package com.system.boot.rbac.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.system.api.rbac.entity.po.SysMenu;
import com.system.api.rbac.entity.po.SysUserAccount;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.yang.common.core.exception.BaseException;
import org.yang.database.orm.entity.BaseQuery;

import java.util.List;
import java.util.Set;

/**
 * B端用户
 *
 * @author: lslands
 * @description:
 * @version：v1.0
 * @date: 2024/6/2 22:32
 */

@Validated
public interface UserService extends IService<SysUserAccount> {

    /**
     * 查询是否重复
     * @param companyId 企业ID
     * @param filed 校验对象字段
     * @param params 被校验的对象值
     * @author lslands
     * @date 2024/6/2 00:39
     * @throws BaseException 字段重复异常
     */
    void isExists(Long companyId,String filed,String params) throws BaseException;

    /**
     * 新增
     * @param  record 插入对象
     * @param  roleIds 角色Ids 可以为空
     * @author lslands
     * @date 2024/6/2 23:46
     * @return  int
     * @throws BaseException 插入异常
     */
    int handInsert(@Valid SysUserAccount record, List<Long> roleIds) throws BaseException;

    /**
     * 根据主键ID修改
     * @param record 修改对象
     * @param roleIds 角色ID 可以为空
     * @author lslands
     * @date 2024/6/3 09:26
     * @return int
     * @throws BaseException 插入异常
     */
    int handUpdateById(@Valid SysUserAccount record,List<Long> roleIds) throws BaseException;


    /**
     * 分页模糊查询列表
     * @param query 分页基础参数
     * @param record 查询条件
     * @return Page<SysIcon>
     */
    Page<SysUserAccount> getPage(BaseQuery query, SysUserAccount record) throws BaseException;

    /**
     * 根据用户Id查询用户名
     * @param userIds 用户ID集
     * @return 用户名集
     * @throws BaseException 查询用户异常
     */
    List<String> getNameByUserId(List<Long> userIds) throws BaseException;

    /**
     * 根据用户Id查询用户
     * @param userId 用户ID
     * @return 用户名
     * @throws BaseException 查询异常
     */
    String getNameByUserId(Long userId) throws BaseException;
}
